#闭包是指在一个函数中定义了一个另外一个函数，内函数里运用了外函数的临时变量，
# 并且外函数的返回值是内函数的引用，这样就构成一个闭包。 例如以下：
def callFunc():
    n = 1
    def show():
        print('show: ', n)
    return show

if __name__ == "__main__":
    s = callFunc()
    s()

'''
去掉了全局变量的使用。而且将 show 函数封装在了 callFunc 函数内部，使外部不可见，不能使用 show 函数，隐藏了实现细节程序在执行时，
callFunc 函数返回了内部定义的 show 函数，并且 在 show 函数内部使用了外部函数的变量。

在 show 函数返回时，保存了当前的执行环境，也就是会在 show 函数中使用的外部变量 n 。
因为 n 是一个 callFunc 函数中的局部变量，正常情况下 callFunc 函数执行结束后，n 就会被释放。
但是现在因为 callFunc 函数中返回了 show 函数，show 函数在外部还会再执行，所以程序会将 show 函数所需的执行环境保存下来。这种形式就是闭包。

'''